home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
001-010
/
amok04
/
checker
/
fsgenerator
< prev
next >
Wrap
Text File
|
1993-11-04
|
10KB
|
462 lines
ANFANG:
GOSUB INITALL
MAIN:'''''''''''''''''''''''''''''''''''''''''''''''''''''
GOSUB BILDAUFBAU
GOSUB OEFFNEN
LOCATE 22,51
PRINT" "
LOCATE 22,51
PRINT"TASTE DRUECKEN"
WARTEN:
IN$=INKEY$
IF IN$="" THEN GOTO WARTEN
LOCATE 22,51
PRINT" "
GOSUB VERBLOOP
END
VERBLOOP:
DX=EICH*2*DT
PX=XALT
PXALT=PX
WHILE XX=0 'PX<XNEU
KM=KM+V/10000*DT/.25 'KM/SEC
KM&=FIX(10*KM)
TEMPSCHR=DT*TANS/50+TEMPZUFALL
FWIND=FAKTOR*V*V
IF SST=3 THEN
A=(-FWIND+SPEEDZUFALL)/M
V=V+A*DT
ELSEIF SST<4 THEN
A=(KRAFTF*F-FWIND+SPEEDZUFALL)/M
V=V+A*DT
ELSE
V=0
END IF
IF V<0 THEN V=0
VNEU=V*3.6
IF VNEU>2 THEN
MOMVNEU=VERBFAKT*F/VNEU
SPRIT#=SPRIT#-ABS(SPRITFAKT%*EICH*(MOMVNEU*V*DT)/1000000&)
ELSE
MOMVNEU=200
SPRIT#=SPRIT#-ABS(F*SPRITFAKT%*DT*.00001)
END IF
IF SPRIT#<=0 THEN
SPRIT#=0
IF TANKLEER%=0 THEN
F=0
TANKLEER%=1
GOSUB SETF
END IF
END IF
SPRITALT#=SPRIT#
IF SPRIT#<5 THEN SOUND 1000,1
IF MOMVNEU>200 THEN
MOMVNEU=200
ELSEIF MOMVNEU<0 THEN
MOMVNEU=0
END IF
TEMP=TEMP+TEMPSCHR
LINE(PXALT,130-.5*TEMPALT)-(PX,130-.5*TEMP),2
LINE(PXALT,130-.5*MOMVALT)-(PX,130-.5*MOMVNEU),3
LINE(PXALT,130-.5*VALT)-(PX,130-.5*VNEU),1
IF TEMP>=90 THEN SOUND 440,1
MOMVALT=MOMVNEU
VALT=VNEU
TEMPALT=TEMP
PXALT=PX
PX=PX+DX
LOCATE 12,67:PRINT CINT(TEMP)
LOCATE 7,67:PRINT FIX(1000*SPRIT#)/1000 " "
IF PX>520 THEN
GOSUB BILDAUFBAU
XNEU=40+XNEU-PX
PX=40
PXALT=PX
END IF
VNEUI%=CINT(VNEU)
MOMVNEUI%=CINT(MOMVNEU)
SPRITI%=CINT(10*SPRIT#)
TEMPI%=CINT(TEMP)
SSTI%=CINT(SST)
BINAERSUMI%=CINT(BINAERSUM)
IF DNAME$<>"" THEN
VNEU$=STR$(VNEUI%)
MOMVNEUI$=STR$(MOMVNEUI%/10)
SPRITI$=STR$(SPRITI%/10)
TEMPI$=STR$(TEMPI%)
SSTI$=STR$(SSTI%)
BINAERSUMI$=STR$(BINAERSUMI%)
BLINK$=STR$(BLINK%)
KM$=STR$(KM&/10)
WRITE #1,VNEU$
WRITE #1,MOMVNEUI$
WRITE #1,SPRITI$
WRITE #1,TEMPI$
WRITE #1,SSTI$
WRITE #1,BINAERSUMI$
WRITE #1,BLINK$
WRITE #1,KM$
END IF
AUSGZAEHLER=AUSGZAEHLER+1
ZUFZAEHLER=ZUFZAEHLER+1
IF ZUFZAEHLER>10 THEN
SPEEDZUFALL=120*RND-60
TEMPZUFALL=.2*RND-.1
ZUFZAEHLER=0
END IF
GOSUB SHOWAUSG
WEND
RETURN
SHOWAUSG:
LOCATE 22,5:PRINT USING"#####";AUSGZAEHLER;
LOCATE 22,11:PRINT":";
LOCATE 22,13:PRINT USING"#####";VNEUI%;
LOCATE 22,18:PRINT USING"#####";MOMVNEUI%;
LOCATE 22,23:PRINT USING"#####";SPRITI%;
LOCATE 22,28:PRINT USING"#####";TEMPI%;
LOCATE 22,33:PRINT USING"#####";SSTI%;
LOCATE 22,38:PRINT USING"#####";BINAERSUMI%;
LOCATE 22,43:PRINT USING"#####";BLINK%;
LOCATE 22,51:PRINT KM&" "
RETURN
SETSST:
CALL PASSIV(1,SST+1)
SST=MPUNKT%-1
CALL AKTIV(1,SST+1)
IF SST=0 THEN
FAKTOR=.4
KRAFTF=1
ELSEIF SST=1 OR SST=2 THEN
FAKTOR=1.6
KRAFTF=1.2
ELSEIF SST=4 THEN
FAKTOR=.4
KRAFTF=0
END IF
RETURN
SUB AKTIV(MTITEL%,MPUNKT%)STATIC
SHARED SMENU$()
MENU MTITEL%,MPUNKT%,2," "+SMENU$(MTITEL%,MPUNKT%)
END SUB
SUB PASSIV(MTITEL%,MPUNKT%)STATIC
SHARED SMENU$()
MENU MTITEL%,MPUNKT%,1
MENU MTITEL%,MPUNKT%,1," "+SMENU$(MTITEL%,MPUNKT%)
END SUB
SPRITVERB:
IF MPUNKT%<4 THEN
FOR I%=1 TO 3
CALL PASSIV(4,I%)
NEXT
CALL AKTIV(4,MPUNKT%)
IF MPUNKT%=1 THEN
SPRITFAKT%=1
ELSEIF MPUNKT%=2 THEN
SPRITFAKT%=10
ELSEIF MPUNKT%=3 THEN
SPRITFAKT%=50
END IF
ELSE
IF MPUNKT%=4 THEN
SPRIT#=40!
TANKLEER%=0
END IF
END IF
RETURN
BINAERANZ:
IF MPUNKT%<4 THEN 'LICHTER
CALL PASSIV(2,BINANZ%(1)+1)
BINANZ%(1)=MPUNKT%-1
CALL AKTIV(2,MPUNKT%)
ELSEIF MPUNKT%>=4 AND MPUNKT%<=9 THEN 'BINAERANZ
IF BINANZ%(MPUNKT%-2)=1 THEN
CALL PASSIV(2,MPUNKT%)
BINANZ%(MPUNKT%-2)=0
ELSEIF BINANZ%(MPUNKT%-2)=0 THEN
CALL AKTIV(2,MPUNKT%)
BINANZ%(MPUNKT%-2)=1
END IF
ELSEIF MPUNKT%<12 THEN 'BLINKER
IF MBLINK%=MPUNKT% THEN 'GEW.PUNKT WAR AKTIVIERT
CALL PASSIV(2,MPUNKT%) '--> AUSSCHALTEN
MBLINK%=0
BLINK%=0
ELSEIF MBLINK%=0 THEN 'BLINKER WAR AUS
CALL AKTIV(2,MPUNKT%) '--> ANSCHALTEN
IF MPUNKT%=10 THEN BLINK%=-1
IF MPUNKT%=11 THEN BLINK%=1
MBLINK%=MPUNKT%
ELSEIF MBLINK%>0 THEN 'ANDERE BLINKRICHTUNG WAR AN
CALL PASSIV(2,MBLINK%)
IF MPUNKT%=10 THEN BLINK%=-1
IF MPUNKT%=11 THEN BLINK%=1
MBLINK%=MPUNKT%
CALL AKTIV(2,MPUNKT%)
END IF
END IF
BINAERSUM=BINANZ%(1)*1+BINANZ%(2)*4+BINANZ%(3)*8
BINAERSUM=BINAERSUM+BINANZ%(4)*16+BINANZ%(5)*32
BINAERSUM=BINAERSUM+BINANZ%(6)*64+BINANZ%(7)*128
RETURN
OEFFNEN:
LOCATE 22,5: INPUT "NAME DER AUSGABEDATEI ",DNAME$
LOCATE 22,5: PRINT " "
IF DNAME$="" THEN RETURN
DNAME$="DAT:"+DNAME$
OPEN DNAME$ FOR OUTPUT AS #1 LEN=4096
RETURN
BILDAUFBAU:
CLS
LOCATE 2,6
COLOR 1,0:PRINT "GESCHWINDIGKEIT ";
COLOR 3,0:PRINT "VERBRAUCH * 10 ";
COLOR 2,0:PRINT "TEMPERATUR"
LOCATE 5,68:PRINT "TANKINHALT"
LOCATE 10,68:PRINT "TEMPERATUR"
COLOR 1,0
LOCATE 15,68:PRINT "F="CINT(F)
COLOR 2,0
PX%=0
FOR Y=30 TO 130 STEP 10
WERTY%=200+(30-Y)*2
PY%=Y+3
CALL PLATZIERE(WERTY%,PX%,PY%)
LINE(40,Y)-(520,Y),2
NEXT
ZAEHL=0
FA=3
WERT%=WERT%-30
FOR X=40 TO 520 STEP 20
IF ZAEHL=0 THEN
WERT%=WERT%+30
PX%=X-15
PY%=142
CALL PLATZIERE(WERT%,PX%,PY%)
END IF
LINE(X,30)-(X,130),2
ZAEHL=ZAEHL+1
IF ZAEHL>2 THEN ZAEHL=0
NEXT
LINE(40,150)-(280,150),1 'GASPOTI
FOR X=40 TO 280 STEP 24
LINE(X,150)-(X,152),1
NEXT
X=160
LINE(X,148)-(X,152),1
LINE(400,150)-(520,150),1 'TEMPPOTI
FOR X=400 TO 520 STEP 12
LINE(X,150)-(X,152),1
NEXT
X=460
LINE(X,148)-(X,152),1
COLOR 1,0
XF%=160
XT%=460
GOSUB SETFNEU
GOSUB SETTANSNEU
RETURN
SETF:
AREA(FPOS%,153)
AREA(FPOS%+6,159)
AREA(FPOS%-6,159)
AREAFILL 1
SETFNEU:
FPOS%=XF%+F*.12
AREA(FPOS%,153)
AREA(FPOS%+6,159)
AREA(FPOS%-6,159)
AREAFILL 1
LOCATE 15,68: PRINT "F="CINT(F)" "
RETURN
SETTANS:
AREA(TPOS%,153)
AREA(TPOS%+6,159)
AREA(TPOS%-6,159)
AREAFILL 1
SETTANSNEU:
TPOS%=XT%+TANS*1.2 'TANS MAX=50
AREA(TPOS%,153)
AREA(TPOS%+6,159)
AREA(TPOS%-6,159)
AREAFILL 1
RETURN
MOUSEPATH:
I=MOUSE(0)
MPOS%=MOUSE(3)
IF MPOS%<0 THEN BEEP
IF MPOS%>=40 AND MPOS%<=280 THEN
F=(MPOS%-XF%)/.12
IF TANKLEER%=1 AND F>0 THEN
BEEP
F=0
END IF
GOSUB SETF
ELSEIF MPOS%>=400 AND MPOS%<=520 THEN
TANS=(MPOS%-XT%)/1.2
GOSUB SETTANS
END IF
RETURN
BEENDEN:
IF DNAME$<>"" THEN
WRITE #1," "
WRITE #1," "
WRITE #1," "
WRITE #1," "
WRITE #1," "
WRITE #1," "
WRITE #1," "
WRITE #1," "
WRITE #1," "
CLOSE 1
END IF
MENU OFF
WINDOW CLOSE 4
LIBRARY CLOSE
END
FEHLER:
IF DNAME$<>"" THEN
WRITE #1," "
WRITE #1," "
WRITE #1," "
WRITE #1," "
WRITE #1," "
WRITE #1," "
WRITE #1," "
WRITE #1," "
WRITE #1," "
CLOSE 1
END IF
MENU OFF
WINDOW CLOSE 4
LIBRARY CLOSE
PRINT ""
PRINT "Ein Fehler ist aufgetreten!"
PRINT "Das Programm wurde beendet und die Ausgabedatei geschlossen."
END
SUB INVERTVIDEO STATIC
CALL SetDrMd& (WINDOW(8),3)
END SUB
SUB NORMALVIDEO STATIC
CALL SetDrMd& (WINDOW(8),1)
END SUB
INITALL:
LIBRARY "graphics.library"
ON BREAK GOSUB BEENDEN:BREAK ON
DIM BINANZ%(8)
DEFLNG RASTPORT
DEFINT BLINK,SST,BINAERSUM
TITEL$="Fahr-Situation-Generator Pit Burkhardt Januar 1988 "
WINDOW 4,TITEL$,,7
RASTPORT=WINDOW(8)
KRAFTF=1
FAKTOR=.3 '.4
VERBFAKT=20
F=0
M=900
SPRITFAKT%=1
DT=.56 '.65 'ZEITLICHES AUSGABENINTERVALL
EICH=.5 '.4 'ANPASSUNG AN SKALA
GOSUB INITMENU
ON MOUSE GOSUB MOUSEPATH
ON ERROR GOTO FEHLER
SST=0
CALL AKTIV(1,1) 'SCHALTSTELLUNG FAHREN
CALL AKTIV(2,1) 'LICHT AUS
CALL AKTIV(4,1) 'SPRIT NORMAL
INPUT"Tankinhalt bei Fahrtbeginn (0..40) ? ",SPRIT#
IF SPRIT#<0 OR SPRIT#>40 THEN SPRIT#=40
INPUT"Kuehlmitteltemperatur bei Fahrtbeginn ? ",TEMP
INPUT"Kilometerstand bei Fahrtbeginn ? ",KM
IF KM>9000000& THEN KM=9000000&
XNEU=40
XALT=40
VERBALT=0
TEMPALT=20
VALT=0
SPRITALT=SPRIT
MOUSE ON
'ERROR ON
RETURN
INITMENU:
DIM SMENU$(4,11)
SMENU$(1,0)="Automatik"
SMENU$(1,1)="Fahren"
SMENU$(1,2)="Bergfahren"
SMENU$(1,3)="Rückwärts"
SMENU$(1,4)="Neutral"
SMENU$(1,5)="Parken"
SMENU$(2,0)="Binäranzeigen"
SMENU$(2,1)="Licht aus"
SMENU$(2,2)="Abblendlicht"
SMENU$(2,3)="Fernlicht"
SMENU$(2,4)="Hecksch. Heizung"
SMENU$(2,5)="Handbremse"
SMENU$(2,6)="Gurt anlegen!"
SMENU$(2,7)="Ölstand!"
SMENU$(2,8)="Batterieladung!"
SMENU$(2,9)="Warnblinker an"
SMENU$(2,10)="Links blinken"
SMENU$(2,11)="Rechts blinken"
SMENU$(4,0)="Kraftstoff"
SMENU$(4,1)="Normalverbrauch"
SMENU$(4,2)="Verbrauch * 10"
SMENU$(4,3)="Verbrauch * 50"
SMENU$(4,4)="Tank voll"
FOR I=0 TO 5
MENU 1,I,1," "+SMENU$(1,I)
NEXT
FOR I=0 TO 11
MENU 2,I,1," "+SMENU$(2,I)
NEXT
FOR I=0 TO 4
MENU 4,I,1," "+SMENU$(4,I)
NEXT
ON MENU GOSUB MENUPATH
MENU ON
RETURN
MENUPATH:
MTITEL%=MENU(0)
MPUNKT%=MENU(1)
ON MTITEL% GOSUB SETSST,BINAERANZ,,SPRITVERB
RETURN
SUB PLATZIERE(WERT%,STRX%,STRY%) STATIC
SHARED RASTPORT
CALL MOVE(RASTPORT,STRX%,STRY%)
PRINT WERT%
END SUB
LIST SPRITVERB